package main

import "fmt"

func main() {
	// make和new函数
	// new函数用法
	// var p *int // 声明一个变量p 但变量没有初始值 没有内存 默认为nil
	// *p = 10 // 会报错无法给*p赋值 p还是占空间的，此处的意思是把nil地址的值设置为10
	// 默认值 int byte rune float bool string 这些类型都有默认值
	// 指针，切片 map，接口这些默认nil 理解为none
	var a int = 10
	fmt.Println(a)
	// 对于指针来说或者其他默认值是0的情况来说，如何一开始申明的时候就分配内存呢
	var p *int = new(int) // new会在内存中申请到地址然后传递给*p
	*p = 10
	fmt.Println(*p)

	//除了new函数可以申请内存以外，还有一个函数就是make，更加常用一般使用 map slice初始化
	var info = make(map[string]string)
	info["C"] = "zbw"
	fmt.Println(info)

	// new 函数返回的是这个值的地址，指针，make函数返回的是指定类型的实例
	// nil的一些细节
	// map 默认值为nil ，slice 默认值也是nil， error 默认也是nil
	var info2 map[string]string
	if info2 == nil {
		fmt.Println("map的默认值为nil")
	}
	// go 语言中nil 是唯一可以来用表示部分类型零值的标识符，他代表内存中不同的值
}
